package com.yusys.pattern.mode.visitor;

import java.util.ArrayList;
import java.util.List;

/**
 * 观察者模式使用三个类 Subject、Observer 和 Client
 *
 * Subject 对象带有绑定观察者到 Client 对象和从 Client 对象解绑观察者的方法。
 *
 *
 * 【被观察者】拥有了所有的观察者，被观察者通知了观察者
 *
 */
public class Subject {

    private List<Observer> observers = new ArrayList<>();

    private int state;

    //被观察者被修改状态时，通知所有的观察者
    public void setState(int state){
        this.state = state;
        notifyAllObservers();
    }

    public int getState(){
        return state;
    }


    // 注册观察者的方法
    public void register(Observer observer){
        observers.add(observer);
    }

    // 通知所有观察者的方法
    public void notifyAllObservers(){
        for (Observer observer: observers) {
            observer.update();
        }
    }


}
